package com.hbnu.cmd.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 输入工具类，用于接收用户输入。
 */

public class Input {
    private static final Logger logger = LoggerFactory.getLogger(Input.class);
    private static Input instance;
    private final BufferedReader reader;

    /**
     * 私有构造函数，保证单例模式。
     */
    private Input() {
        reader = new BufferedReader(new InputStreamReader(System.in));
    }

    /**
     * 获取单例输入工具实例。
     * @return 单例输入工具实例
     */
    public static synchronized Input getInstance() {
        if (instance == null) {
            instance = new Input();
        }
        return instance;
    }

    /**
     * 接收用户输入，并返回字符串。
     * @return 用户输入的字符串
     */
    public String readLine() {
        try {
            return reader.readLine();
        } catch (IOException e) {
            logger.error("输入异常: ", e);
            return null;
        }
    }

    /**
     * 接收用户输入，并返回字符串，并去除首尾空格。
     * @return 用户输入的字符串，去除首尾空格
     */
    public String readLineTrim() {
        try {
            return reader.readLine().trim();
        } catch (IOException e) {
            logger.error("输入异常: ", e);
            return null;
        }
    }

    /**
     * 接收用户输入，并返回整数。
     * @return 用户输入的整数
     */
    public Integer readInt() {
        try {
            return Integer.parseInt(reader.readLine());
        } catch (NumberFormatException e) {
            logger.warn("输入非整数: ", e);
            return null;
        } catch (IOException e) {
            logger.error("输入异常: ", e);
            return null;
        }
    }

    /**
     * 接收用户输入，并返回实数。
     * @return 用户输入的实数
     */
    public Double readDouble() {
        try {
            return Double.parseDouble(reader.readLine());
        } catch (NumberFormatException e) {
            logger.warn("输入非实数: ", e);
            return null;
        } catch (IOException e) {
            logger.error("输入异常: ", e);
            return null;
        }
    }

    /**
     * 关闭输入资源。
     */
    public void close() {
        try {
            reader.close();
        } catch (IOException e) {
            logger.error("关闭输入异常: ", e);
        }
    }
}
